{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "dbfff3b2-fbfd-4ba5-929c-c45d028801f3",
   "metadata": {},
   "source": [
    "# Llama LLM API Client Notebook"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6fcc5513-4c08-42e5-9b96-20b37482d1ea",
   "metadata": {},
   "source": [
    "## This Notebook will send a request to the Llama LLM model's API and retrieve the response."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5f98a3c4-81a6-44be-987a-cd4f5adcef77",
   "metadata": {},
   "source": [
    "### First we will import os, gradio and the LlamaAPIClient"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4c2a01b9-23d3-4f0e-9c1f-92b2b2b37231",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import gradio as gr\n",
    "from llama_api_client import LlamaAPIClient"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e3e17aea-0422-4ad4-8ada-94e56e5b0fcf",
   "metadata": {},
   "source": [
    "# Use the following [link](https://l.facebook.com/l.php?u=https%3A%2F%2Fllama.developer.meta.com%2F&h=AT1np-Q96F0Qym-qTXCKJuPUqZePWH7EWzib2mRB0XSqjajogDg91FWpn-_MRnaVS7CGCR1o4Z3wff5uQNe55poibnARsHoU_Yf-uKANWztHmiSgl56GTo5ERQR1o8GmHatZ2Eb_hdCGIO4iD3-c0QZN5Sdq) to retrieve your Llama API key. Next, configure your environment by setting the \"LLAMA_API_KEY\" variable to the obtained key using one of the following steps."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "8ff2c746-44ba-4594-9293-6fdae986fa1b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# either run the following command in your cli terminal\n",
    "# export LLAMA_API_KEY='Llama API key'\n",
    "# Or\n",
    "# Directly set your LLAMA_API_KEY environment variable here\n",
    "# os.environ['LLAMA_API_KEY'] = 'Llama API key' "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e7855614-9a8b-421d-b4ec-32b278c24f90",
   "metadata": {},
   "source": [
    "### Run the \"infer\" function to create an interactive UI where you can enter your input prompt for the LLM in the designated \"user_input\" field and view the generated response in the adjacent \"output\" field."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "fd340fa0-a116-4f13-999b-60f5f99f2dc3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "* Running on local URL:  http://127.0.0.1:7890\n",
      "* To create a public link, set `share=True` in `launch()`.\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div><iframe src=\"http://127.0.0.1:7890/\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": []
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# You can switch between the following models:\n",
    "# Llama-3.3-70B-Instruct\n",
    "# Llama-4-Maverick-17B-128E-Instruct-FP8\n",
    "def infer(user_input:str, model_id:str):\n",
    "    response = client.chat.completions.create(\n",
    "    model=model_id,\n",
    "    messages=[\n",
    "        {\"role\": \"user\", \"content\": user_input},\n",
    "    ])\n",
    "    return response.completion_message.content.text\n",
    "\n",
    "\n",
    "demo = gr.Interface(fn=infer,\n",
    "             inputs=[gr.Textbox(),gr.Text(\"Llama-4-Maverick-17B-128E-Instruct-FP8\")], \n",
    "             outputs=gr.Textbox(), #<-- Gradio TextBox component as an output component\n",
    "             )\n",
    "\n",
    "demo.launch()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1ba1007d-5730-4b2e-a52e-ce4a8bb2313b",
   "metadata": {},
   "source": [
    "### The model can be used on a range of use cases, including factoid-based question answering, to demonstrate its effectiveness and versatility in real-world scenarios."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "bc3dbb92-134f-477d-a4f4-67cd565a0618",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "* Running on local URL:  http://127.0.0.1:7889\n",
      "* To create a public link, set `share=True` in `launch()`.\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div><iframe src=\"http://127.0.0.1:7889/\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": []
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# You can switch between the following models:\n",
    "# Llama-3.3-70B-Instruct\n",
    "# Llama-4-Maverick-17B-128E-Instruct-FP8\n",
    "def infer(user_input:str, model_id:str):\n",
    "    response = client.chat.completions.create(\n",
    "    model=model_id,\n",
    "    messages=[\n",
    "        {\"role\": \"user\", \"content\": user_input},\n",
    "    ])\n",
    "    return response.completion_message.content.text\n",
    "\n",
    "\n",
    "demo = gr.Interface(fn=infer,\n",
    "             inputs=[gr.Textbox(),gr.Text(\"Llama-4-Maverick-17B-128E-Instruct-FP8\")], \n",
    "             outputs=gr.Textbox(), #<-- Gradio TextBox component as an output component\n",
    "             )\n",
    "\n",
    "demo.launch()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "5a47117e-700a-4025-bdf4-1f7972b0cd39",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "* Running on local URL:  http://127.0.0.1:7891\n",
      "* To create a public link, set `share=True` in `launch()`.\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div><iframe src=\"http://127.0.0.1:7891/\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": []
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# You can switch between the following models:\n",
    "# Llama-3.3-70B-Instruct\n",
    "# Llama-4-Maverick-17B-128E-Instruct-FP8\n",
    "def infer(user_input:str, model_id:str):\n",
    "    response = client.chat.completions.create(\n",
    "    model=model_id,\n",
    "    messages=[\n",
    "        {\"role\": \"user\", \"content\": user_input},\n",
    "    ])\n",
    "    return response.completion_message.content.text\n",
    "\n",
    "\n",
    "demo = gr.Interface(fn=infer,\n",
    "             inputs=[gr.Textbox(),gr.Text(\"Llama-4-Maverick-17B-128E-Instruct-FP8\")], \n",
    "             outputs=gr.Textbox(), #<-- Gradio TextBox component as an output component\n",
    "             )\n",
    "\n",
    "demo.launch()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "77d87202-da25-41e3-b3d2-7b0aa979e739",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
